package com.mylib.libcore.tools;
import android.content.Context;
import com.bytedance.sdk.openadsdk.TTAdConfig;
import com.bytedance.sdk.openadsdk.TTAdConstant;
import com.bytedance.sdk.openadsdk.TTAdManager;
import com.bytedance.sdk.openadsdk.TTAdNative;
import com.bytedance.sdk.openadsdk.TTAdSdk;
import static com.blankj.utilcode.util.AppUtils.getAppName;
import static com.mylib.libcore.config.AppConfig.CSJ_APP_ID;


/**
 * 可以用一个单例来保存TTAdManager实例，在需要初始化sdk的时候调用
 */
public class TTAdManagerHolder {

    private static boolean sInit;

    public static TTAdManager get() {
        if (!sInit) {
            throw new RuntimeException("TTAdSdk is not init, please check.");
        }
        return TTAdSdk.getAdManager();
    }

    public static void init(Context context) {
        doInit(context);
    }

    //step1:接入网盟广告sdk的初始化操作，详情见接入文档和穿山甲平台说明
    private static void doInit(Context context) {
        if (!sInit) {
            //强烈建议在应用对应的Application#onCreate()方法中调用，避免出现content为null的异常
            TTAdSdk.init(context,
                    new TTAdConfig.Builder()
                            .appId(CSJ_APP_ID)
                            .useTextureView(true) //默认使用SurfaceView播放视频广告,当有SurfaceView冲突的场景，可以使用TextureView
                            .appName(getAppName())
                            .titleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK)//落地页主题
                            .allowShowNotify(true) //是否允许sdk展示通知栏提示
                            .debug(true) //测试阶段打开，可以通过日志排查问题，上线时去除该调用
                            .directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI) //允许直接下载的网络状态集合,没有设置的网络下点击下载apk会有二次确认弹窗，弹窗中会披露应用信息
                            .supportMultiProcess(false) //是否支持多进程，true支持
                            .asyncInit(true) //是否异步初始化sdk,设置为true可以减少SDK初始化耗时。3450版本开始废弃~~
                    //.httpStack(new MyOkStack3())//自定义网络库，demo中给出了okhttp3版本的样例，其余请自行开发或者咨询工作人员。
                    .build());
         //   TTAdSdk.init(context, buildConfig());
            sInit = true;
        }
    }

    //初始化广告配置
    public static TTAdNative getTTAdNative(Context context) {
        //step1:初始化sdk
        TTAdManager ttAdManager = TTAdManagerHolder.get();
        //step2:(可选，强烈建议在合适的时机调用):申请部分权限，如read_phone_state,防止获取不了imei时候，下载类广告没有填充的问题。
        TTAdManagerHolder.get().requestPermissionIfNecessary(context);
        //step3:创建 TTAdNative 对象,用于调用广告请求接口
        return ttAdManager.createAdNative(context);
    }

    // 1. 初始化SDK时需要包含APPID，播放器，appname，通知栏提示，debug状态，网络状态等信息
    // 2. 如果是多进程的话，需要在每个请求广告的子进程都进行初始化设置
    private static TTAdConfig buildConfig() {

        return new TTAdConfig.Builder()
                .appId(CSJ_APP_ID)
                .useTextureView(true) //使用TextureView控件播放视频,默认为SurfaceView,当有SurfaceView冲突的场景，可以使用TextureView
                .appName(getAppName())
                .titleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK)
                .allowShowNotify(true) //是否允许sdk展示通知栏提示
                .allowShowPageWhenScreenLock(true) //是否在锁屏场景支持展示广告落地页
                .debug(true) //测试阶段打开，可以通过日志排查问题，上线时去除该调用
                .directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI, TTAdConstant.NETWORK_STATE_3G) //允许直接下载的网络状态集合
                .supportMultiProcess(true)//是否支持多进程
                .asyncInit(true) //是否异步初始化sdk,设置为true可以减少SDK初始化耗时
                //.httpStack(new MyOkStack3())//自定义网络库，demo中给出了okhttp3版本的样例，其余请自行开发或者咨询工作人员。
                .build();
    }
}
